#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# (c) Shrimadhav U K

# the logging things
import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

import numpy
import os
from PIL import Image
import time

# the secret configuration specific things
if bool(os.environ.get("WEBHOOK", False)):
    from sample_config import Config
else:
    from config import Config

# the Strings used for this "thing"
from translation import Translation

import pyrogram
logging.getLogger("pyrogram").setLevel(logging.WARNING)


@pyrogram.Client.on_message(pyrogram.filters.command(["genthumbnail"]))
async def generate_custom_thumbnail(bot, update):
    if update.from_user.id in Config.AUTH_USERS:
        if update.reply_to_message is not None:
            reply_message = update.reply_to_message
            if reply_message.media_group_id is not None:
                download_location = Config.DOWNLOAD_LOCATION + "/" + str(update.from_user.id) + "/" + str(reply_message.media_group_id) + "/"
                save_final_image = download_location + str(round(time.time())) + ".jpg"
                list_im = os.listdir(download_location)
                if len(list_im) == 2:
                    imgs = [ Image.open(download_location + i) for i in list_im ]
                    inm_aesph = sorted([(numpy.sum(i.size), i.size) for i in imgs])
                    min_shape = inm_aesph[1][1]
                    imgs_comb = numpy.hstack(numpy.asarray(i.resize(min_shape)) for i in imgs)
                    imgs_comb = Image.fromarray(imgs_comb)
                    # combine: https://stackoverflow.com/a/30228789/4723940
                    imgs_comb.save(save_final_image)
                    # send
                    user = await bot.get_me()
                    mention = user["mention"]
                    await bot.send_photo(
                        chat_id=update.chat.id,
                        photo=save_final_image,
                        caption=Translation.CUSTOM_CAPTION_UL_FILE.format(mention),
                        reply_to_message_id=update.message_id
                    )
                else:
                    await bot.send_message(
                        chat_id=update.chat.id,
                        text=Translation.ERR_ONLY_TWO_MEDIA_IN_ALBUM,
                        reply_to_message_id=update.message_id
                    )
                try:
                    [os.remove(download_location + i) for i in list_im ]
                    os.remove(download_location)
                except:
                    pass
            else:
                await bot.send_message(
                    chat_id=update.chat.id,
                    text=Translation.REPLY_TO_MEDIA_ALBUM_TO_GEN_THUMB,
                    reply_to_message_id=update.message_id
                )
        else:
            await bot.send_message(
                chat_id=update.chat.id,
                text=Translation.REPLY_TO_MEDIA_ALBUM_TO_GEN_THUMB,
                reply_to_message_id=update.message_id
            )


@pyrogram.Client.on_message(pyrogram.filters.photo)
async def save_photo(bot, update):
    if update.from_user.id in Config.AUTH_USERS:
        if update.media_group_id is not None:
            # album is sent
            download_location = Config.DOWNLOAD_LOCATION + "/" + str(update.from_user.id) + "/" + str(update.media_group_id) + "/"
            # create download directory, if not exist
            if not os.path.isdir(download_location):
                os.makedirs(download_location)
            await bot.download_media(
                message=update,
                file_name=download_location
            )
        else:
            # received single photo
            download_location = Config.DOWNLOAD_LOCATION + "/" + str(update.from_user.id) + ".jpg"
            await bot.download_media(
                message=update,
                file_name=download_location
            )
            await bot.send_message(
                chat_id=update.chat.id,
                text=Translation.SAVED_CUSTOM_THUMB_NAIL,
                reply_to_message_id=update.message_id
            )


@pyrogram.Client.on_message(pyrogram.filters.command(["delthumbnail"]))
async def delthumbnail(bot, update):
    if update.from_user.id in Config.AUTH_USERS:
        download_location = Config.DOWNLOAD_LOCATION + "/" + str(update.from_user.id)
        try:
            os.remove(download_location + ".jpg")
            # os.remove(download_location + ".json")
        except:
            pass
        await bot.send_message(
            chat_id=update.chat.id,
            text=Translation.DEL_ETED_CUSTOM_THUMB_NAIL,
            reply_to_message_id=update.message_id
        )
